// ---- Created with 3Dmigoto v1.3.16 on Thu Mar 24 15:47:31 2022

cbuffer _Globals : register(b0)
{
  float4 lightCount : packoffset(c0);
  float4 ambient : packoffset(c1);
  float4 lightInfo[4] : packoffset(c2);
  float4 g_vScreenDepthRect : packoffset(c6);
  float4 g_vDitherSettings : packoffset(c7);
  float4 g_ColorK : packoffset(c8) = {0.270000011,0.670000017,0.0599999987,0};
  float4 g_vLevelMin0 : packoffset(c9) = {0.0500000007,0.0500000007,0.0500000007,0};
  float4 g_vLevelMin1 : packoffset(c10) = {0.100000001,0.100000001,0.100000001,0};
  float4 g_vLevelMax : packoffset(c11) = {0.800000012,0.800000012,0.800000012,0};
  float4 g_vMaxAdd : packoffset(c12) = {0.100000001,0.100000001,0.100000001,0};
  float4 g_vMinSub : packoffset(c13) = {0.0199999996,0.0199999996,0.0199999996,0};
  float4 Color : packoffset(c14);
  float4 Settings : packoffset(c15);
  float4 Settings2 : packoffset(c16);
  float4 Settings3 : packoffset(c17);
  float4 Settings4 : packoffset(c18);
  float4 Transform : packoffset(c19);
  float4 g_vDepthCoordsClamp : packoffset(c20);
  float4 CamPos : packoffset(c21);
  float4 g_vCenterOffs : packoffset(c22);
  float4 g_vHFrustrum : packoffset(c23);
  float4 g_vVFrustrum : packoffset(c24);
  float4 g_avNoise[8] : packoffset(c25);
  float4x4 g_mView : packoffset(c33);
  float4 g_PixelsDir[8] : packoffset(c37);
  float4 g_vHistogramBoundLow : packoffset(c45) = {0,0.0160000008,0.0260000005,0.129999995};
  float4 g_vHistogramBoundHigh : packoffset(c46) = {0.0160000008,0.0260000005,0.129999995,0.409999996};
}

SamplerState LinearSampler_s : register(s0);
SamplerState DiffuseSamplerLerp_s : register(s1);
SamplerState NoiseSamplerNoLerp_s : register(s2);
SamplerState DiffuseSampler2_s : register(s3);
Texture2D<float4> DepthTexture : register(t0);
Texture2D<float4> DiffTexture : register(t1);
Texture2D<float4> DiffTexture2 : register(t2);
Texture2D<float4> NoiseTexture : register(t3);


// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
  float4 v0 : SV_Position0,
  float2 v1 : TEXCOORD0,
  float2 w1 : TEXCOORD1,
  out float4 o0 : SV_Target0)
{
  float4 r0,r1,r2,r3,r4,r5,r6,r7,r8;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.xyzw = DiffTexture.SampleLevel(DiffuseSamplerLerp_s, v1.xy, 0).xyzw;
  r0.w = cmp(r0.w < 0.00999999978);
  if (r0.w != 0) {
    if (-1 != 0) discard;
    o0.xyzw = float4(0,0,0,0);
    return;
  }
  r1.xyzw = DepthTexture.SampleLevel(LinearSampler_s, v1.xy, 0).xyzw;
  r0.w = cmp(12.5 < r1.x);
  if (r0.w != 0) {
    if (-1 != 0) discard;
    o0.xyzw = float4(0,0,0,0);
    return;
  }
  r1.z = 4 * r1.x;
  r2.xy = w1.xy * Settings4.zw + Settings4.xy;
  r2.xyzw = NoiseTexture.SampleLevel(NoiseSamplerNoLerp_s, r2.xy, 0).xyzw;
  r2.xy = r2.xy * float2(2,2) + float2(-1,-1);
  r0.w = 0.5 * Transform.z;
  r1.w = g_vCenterOffs.y * Transform.w;
  r2.z = 0.5 * r1.w;
  r3.x = -r0.w * g_vCenterOffs.x + v1.x;
  r1.w = r1.w * 0.5 + -v1.y;
  r3.y = r1.w / Settings.x;
  r3.z = Settings.y * r0.w;
  r0.xyz = r0.xyz * float3(2,2,2) + float3(-1,-1,-1);
  r1.w = dot(r0.xyz, r0.xyz);
  r1.w = rsqrt(r1.w);
  r0.xyz = r1.www * r0.xyz;
  r1.w = 1 / r3.z;
  r4.xy = r3.xy * r1.zz;
  r1.xy = r4.xy * r1.ww;
  r4.xyz = r0.xyz * r1.zzz;
  r1.xyw = r4.xyz * float3(0.001953125,0.001953125,0.001953125) + r1.xyz;
  r2.w = dot(r3.xyz, r3.xyz);
  r2.w = rsqrt(r2.w);
  r4.xyz = r3.xyz * r2.www;
  r2.w = dot(r4.xyz, r0.xyz);
  r4.xyz = r0.zxy * r3.yzx;
  r4.xyz = r0.yzx * r3.zxy + -r4.xyz;
  r3.w = dot(r4.xyz, r4.xyz);
  r3.w = rsqrt(r3.w);
  r4.xyz = r4.xyz * r3.www;
  r5.xyz = r4.yzx * r0.zxy;
  r5.xyz = r0.yzx * r4.zxy + -r5.xyz;
  r4.xyz = r4.xyz * r2.xxx;
  r0.xyz = r4.xyz * float3(0.100000001,0.100000001,0.100000001) + r0.xyz;
  r4.xyz = r5.xyz * r2.yyy;
  r2.x = -r2.w * r2.w + 1;
  r2.x = sqrt(abs(r2.x));
  r2.x = 1 + -r2.x;
  r2.xyw = r4.xyz * r2.xxx;
  r0.xyz = r2.xyw * float3(0.100000001,0.100000001,0.100000001) + r0.xyz;
  r2.x = dot(r0.xyz, r0.xyz);
  r2.x = rsqrt(r2.x);
  r0.xyz = r2.xxx * r0.xyz;
  r2.x = dot(r3.xyz, r0.xyz);
  r2.x = r2.x + r2.x;
  r0.xyz = r0.xyz * -r2.xxx + r3.xyz;
  r2.x = dot(r0.xyz, r0.xyz);
  r2.x = rsqrt(r2.x);
  r0.xyz = r2.xxx * r0.xyz;
  r2.xyw = r0.xyz * Settings.www + r1.xyw;
  r3.x = dot(g_vHFrustrum.xy, r2.xw);
  r3.x = cmp(0 < r3.x);
  if (r3.x != 0) {
    r3.y = dot(g_vHFrustrum.xy, r1.xw);
    r3.w = dot(g_vHFrustrum.xy, r0.xz);
    r3.y = -r3.y / r3.w;
    r3.w = -1;
  }
  if (r3.x == 0) {
    r3.w = 0;
  }
  if (r3.w != 0) {
    r2.xyw = r0.xyz * r3.yyy + r1.xyw;
  } else {
    r3.x = dot(g_vHFrustrum.zw, r2.xw);
    r3.x = cmp(0 < r3.x);
    if (r3.x != 0) {
      r3.w = dot(g_vHFrustrum.zw, r1.xw);
      r4.x = dot(g_vHFrustrum.zw, r0.xz);
      r3.y = -r3.w / r4.x;
      r3.w = -1;
    }
    if (r3.x == 0) {
      r3.w = 0;
    }
    if (r3.w != 0) {
      r2.xyw = r0.xyz * r3.yyy + r1.xyw;
    } else {
      r3.y = Settings.w;
    }
  }
  r3.x = dot(g_vVFrustrum.yx, r2.yw);
  r3.x = cmp(0 < r3.x);
  if (r3.x != 0) {
    r3.w = dot(g_vVFrustrum.yx, r1.yw);
    r4.x = dot(g_vVFrustrum.yx, r0.yz);
    r3.w = -r3.w / r4.x;
    r4.x = -1;
  }
  if (r3.x == 0) {
    r4.x = 0;
  }
  if (r4.x != 0) {
    r2.xyw = r0.xyz * r3.www + r1.xyw;
    r3.y = r3.w;
  } else {
    r3.x = dot(g_vVFrustrum.wz, r2.yw);
    r3.x = cmp(0 < r3.x);
    if (r3.x != 0) {
      r3.w = dot(g_vVFrustrum.wz, r1.yw);
      r4.x = dot(g_vVFrustrum.wz, r0.yz);
      r3.w = -r3.w / r4.x;
      r4.x = -1;
    }
    if (r3.x == 0) {
      r4.x = 0;
    }
    if (r4.x != 0) {
      r2.xyw = r0.xyz * r3.www + r1.xyw;
      r3.y = r3.w;
    }
  }
  r3.x = cmp(r2.w < 0.200000003);
  if (r3.x != 0) {
    r3.x = -0.200000003 + r1.w;
    r3.y = r3.x / -r0.z;
    r2.xyw = r0.xyz * r3.yyy + r1.xyw;
  }
  r1.x = r3.z / r2.w;
  r1.xy = r2.xy * r1.xx;
  r2.x = r0.w * g_vCenterOffs.x + r1.x;
  r2.y = -r1.y * Settings.x + r2.z;
  r1.xy = -v1.xy + r2.xy;
  r0.w = dot(r1.xy, r1.xy);
  r0.w = sqrt(r0.w);
  r0.w = r0.w * Settings3.z + 0.5;
  r0.w = (int)r0.w;
  r2.x = (int)Settings3.x;
  r0.w = min((int)r2.x, (int)r0.w);
  r2.x = cmp(0 < (int)r0.w);
  if (r2.x != 0) {
    r2.x = (int)r0.w;
    r2.x = 1 / r2.x;
    r2.yz = r2.xx * r1.xy;
    r3.x = 1 / r1.w;
    r3.w = 1 / r2.w;
    r3.w = r3.w + -r3.x;
    r4.xyzw = v1.xyxy;
    r5.y = 0;
    r5.xz = r1.zz;
    r5.w = 1;
    r6.xy = r1.zz;
    r6.z = r3.x;
    while (true) {
      r6.w = cmp((int)r5.y < (int)r0.w);
      r7.x = cmp(0 < r5.w);
      r6.w = r6.w ? r7.x : 0;
      if (r6.w == 0) break;
      r7.xy = r1.xy * r2.xx + r4.xy;
      r6.z = r3.w * r2.x + r6.z;
      r6.w = 1 / r6.z;
      r8.xyzw = DepthTexture.SampleLevel(LinearSampler_s, r7.xy, 0).xyzw;
      r7.z = 4 * r8.x;
      r5.w = r8.x * 4 + -r6.w;
      r5.y = (int)r5.y + 1;
      r4.zw = r4.xy;
      r5.z = r5.x;
      r6.x = r6.y;
      r6.y = r7.z;
      r4.xy = r7.xy;
      r5.x = r6.w;
    }
    r1.x = cmp(r5.w < 0);
    r1.y = cmp(-r3.y < r5.w);
    r1.x = r1.y ? r1.x : 0;
    if (r1.x != 0) {
      r7.xyzw = DiffTexture.SampleLevel(DiffuseSamplerLerp_s, r4.xy, 0).xyzw;
      r1.xyz = r7.xyz * float3(2,2,2) + float3(-1,-1,-1);
      r0.x = dot(r1.xyz, r0.xyz);
      r0.x = cmp(r0.x < -0.100000001);
      if (r0.x != 0) {
        r0.x = dot(r2.yz, r2.yz);
        r0.x = sqrt(r0.x);
        r0.yz = r4.xy;
        r1.xy = r4.zw;
        r2.xy = r4.xy;
        r1.z = r5.x;
        r2.z = 0;
        r3.x = r5.z;
        r3.yw = r6.xy;
        r5.y = r5.x;
        r5.w = r0.x;
        while (true) {
          r6.z = cmp((int)r2.z < (int)r0.w);
          r6.w = cmp(Settings.z < r5.w);
          r6.z = r6.w ? r6.z : 0;
          if (r6.z == 0) break;
          r6.z = r3.x + r1.z;
          r5.y = 0.5 * r6.z;
          r6.zw = r1.xy + r0.yz;
          r2.xy = float2(0.5,0.5) * r6.zw;
          r7.xyzw = DepthTexture.SampleLevel(LinearSampler_s, r2.xy, 0).xyzw;
          r6.z = 4 * r7.x;
          r6.w = cmp(r5.y < r6.z);
          if (r6.w != 0) {
            r1.xy = r2.xy;
            r3.x = r5.y;
            r3.y = r6.z;
          } else {
            r0.yz = r2.xy;
            r1.z = r5.y;
            r3.w = r6.z;
          }
          r6.zw = -r1.xy + r0.yz;
          r6.z = dot(r6.zw, r6.zw);
          r5.w = sqrt(r6.z);
          r2.z = (int)r2.z + 1;
        }
        r0.x = r3.w + -r3.y;
        r0.x = abs(r0.x) * r3.z;
        r0.y = r3.y + r3.w;
        r0.y = 0.5 * r0.y;
        r0.x = r0.x / r0.y;
        r0.x = r0.x / r5.w;
        r0.x = cmp(r0.x < Settings3.y);
        if (r0.x != 0) {
          r0.xy = -Transform.xy + r2.xy;
          r0.xy = r0.xy / Transform.zw;
          r0.xy = r0.xy * Settings2.zw + Settings2.xy;
          r0.xyzw = DiffTexture2.SampleLevel(DiffuseSampler2_s, r0.xy, 0).xyzw;
          r0.w = r5.y + -r1.w;
          r1.x = r2.w + -r1.w;
          r0.w = r0.w / r1.x;
          r1.x = -35 + r1.w;
          r1.x = saturate(0.0666666701 * r1.x);
          r1.y = 1 + -r0.w;
          r0.w = r1.x * r1.y + r0.w;
          r0.w = -r0.w * r0.w + 1;
          o0.xyz = r0.xyz * r0.www;
          o0.w = r0.w;
        } else {
          o0.xyzw = float4(0,0,0,0);
        }
      } else {
        o0.xyzw = float4(0,0,0,0);
      }
    } else {
      o0.xyzw = float4(0,0,0,0);
    }
  } else {
    o0.xyzw = float4(0,0,0,0);
  }
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
//   using 3Dmigoto v1.3.16 on Thu Mar 24 15:47:31 2022
//
//
// Buffer Definitions:
//
// cbuffer $Globals
// {
//
//   float4 lightCount;                 // Offset:    0 Size:    16 [unused]
//   float4 ambient;                    // Offset:   16 Size:    16 [unused]
//   float4 lightInfo[4];               // Offset:   32 Size:    64 [unused]
//   float4 g_vScreenDepthRect;         // Offset:   96 Size:    16 [unused]
//   float4 g_vDitherSettings;          // Offset:  112 Size:    16 [unused]
//   float4 g_ColorK;                   // Offset:  128 Size:    16 [unused]
//      = 0x3e8a3d71 0x3f2b851f 0x3d75c28f 0x00000000
//   float4 g_vLevelMin0;               // Offset:  144 Size:    16 [unused]
//      = 0x3d4ccccd 0x3d4ccccd 0x3d4ccccd 0x00000000
//   float4 g_vLevelMin1;               // Offset:  160 Size:    16 [unused]
//      = 0x3dcccccd 0x3dcccccd 0x3dcccccd 0x00000000
//   float4 g_vLevelMax;                // Offset:  176 Size:    16 [unused]
//      = 0x3f4ccccd 0x3f4ccccd 0x3f4ccccd 0x00000000
//   float4 g_vMaxAdd;                  // Offset:  192 Size:    16 [unused]
//      = 0x3dcccccd 0x3dcccccd 0x3dcccccd 0x00000000
//   float4 g_vMinSub;                  // Offset:  208 Size:    16 [unused]
//      = 0x3ca3d70a 0x3ca3d70a 0x3ca3d70a 0x00000000
//   float4 Color;                      // Offset:  224 Size:    16 [unused]
//   float4 Settings;                   // Offset:  240 Size:    16
//   float4 Settings2;                  // Offset:  256 Size:    16
//   float4 Settings3;                  // Offset:  272 Size:    16
//   float4 Settings4;                  // Offset:  288 Size:    16
//   float4 Transform;                  // Offset:  304 Size:    16
//   float4 g_vDepthCoordsClamp;        // Offset:  320 Size:    16 [unused]
//   float4 CamPos;                     // Offset:  336 Size:    16 [unused]
//   float4 g_vCenterOffs;              // Offset:  352 Size:    16
//   float4 g_vHFrustrum;               // Offset:  368 Size:    16
//   float4 g_vVFrustrum;               // Offset:  384 Size:    16
//   float4 g_avNoise[8];               // Offset:  400 Size:   128 [unused]
//   float4x4 g_mView;                  // Offset:  528 Size:    64 [unused]
//   float4 g_PixelsDir[8];             // Offset:  592 Size:   128 [unused]
//   float4 g_vHistogramBoundLow;       // Offset:  720 Size:    16 [unused]
//      = 0x00000000 0x3c83126f 0x3cd4fdf4 0x3e051eb8
//   float4 g_vHistogramBoundHigh;      // Offset:  736 Size:    16 [unused]
//      = 0x3c83126f 0x3cd4fdf4 0x3e051eb8 0x3ed1eb85
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// LinearSampler                     sampler      NA          NA    0        1
// DiffuseSamplerLerp                sampler      NA          NA    1        1
// NoiseSamplerNoLerp                sampler      NA          NA    2        1
// DiffuseSampler2                   sampler      NA          NA    3        1
// DepthTexture                      texture  float4          2d    0        1
// DiffTexture                       texture  float4          2d    1        1
// DiffTexture2                      texture  float4          2d    2        1
// NoiseTexture                      texture  float4          2d    3        1
// $Globals                          cbuffer      NA          NA    0        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float
// TEXCOORD                 0   xy          1     NONE   float   xy
// TEXCOORD                 1     zw        1     NONE   float     zw
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target                0   xyzw        0   TARGET   float   xyzw
//
ps_4_0
dcl_constantbuffer cb0[25], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_sampler s2, mode_default
dcl_sampler s3, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_resource_texture2d (float,float,float,float) t2
dcl_resource_texture2d (float,float,float,float) t3
dcl_input_ps linear v1.xy
dcl_input_ps linear v1.zw
dcl_output o0.xyzw
dcl_temps 9
sample_l r0.xyzw, v1.xyxx, t1.xyzw, s1, l(0.000000)
lt r0.w, r0.w, l(0.010000)
if_nz r0.w
  discard_nz l(-1)
  mov o0.xyzw, l(0,0,0,0)
  ret
endif
sample_l r1.xyzw, v1.xyxx, t0.xyzw, s0, l(0.000000)
lt r0.w, l(12.500000), r1.x
if_nz r0.w
  discard_nz l(-1)
  mov o0.xyzw, l(0,0,0,0)
  ret
endif
mul r1.z, r1.x, l(4.000000)
mad r2.xy, v1.zwzz, cb0[18].zwzz, cb0[18].xyxx
sample_l r2.xyzw, r2.xyxx, t3.xyzw, s2, l(0.000000)
mad r2.xy, r2.xyxx, l(2.000000, 2.000000, 0.000000, 0.000000), l(-1.000000, -1.000000, 0.000000, 0.000000)
mul r0.w, cb0[19].z, l(0.500000)
mul r1.w, cb0[19].w, cb0[22].y
mul r2.z, r1.w, l(0.500000)
mad r3.x, -r0.w, cb0[22].x, v1.x
mad r1.w, r1.w, l(0.500000), -v1.y
div r3.y, r1.w, cb0[15].x
mul r3.z, r0.w, cb0[15].y
mad r0.xyz, r0.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
dp3 r1.w, r0.xyzx, r0.xyzx
rsq r1.w, r1.w
mul r0.xyz, r0.xyzx, r1.wwww
div r1.w, l(1.000000, 1.000000, 1.000000, 1.000000), r3.z
mul r4.xy, r1.zzzz, r3.xyxx
mul r1.xy, r1.wwww, r4.xyxx
mul r4.xyz, r1.zzzz, r0.xyzx
mad r1.xyw, r4.xyxz, l(0.00195312500, 0.00195312500, 0.000000, 0.00195312500), r1.xyxz
dp3 r2.w, r3.xyzx, r3.xyzx
rsq r2.w, r2.w
mul r4.xyz, r2.wwww, r3.xyzx
dp3 r2.w, r4.xyzx, r0.xyzx
mul r4.xyz, r3.yzxy, r0.zxyz
mad r4.xyz, r0.yzxy, r3.zxyz, -r4.xyzx
dp3 r3.w, r4.xyzx, r4.xyzx
rsq r3.w, r3.w
mul r4.xyz, r3.wwww, r4.xyzx
mul r5.xyz, r0.zxyz, r4.yzxy
mad r5.xyz, r0.yzxy, r4.zxyz, -r5.xyzx
mul r4.xyz, r2.xxxx, r4.xyzx
mad r0.xyz, r4.xyzx, l(0.100000, 0.100000, 0.100000, 0.000000), r0.xyzx
mul r4.xyz, r2.yyyy, r5.xyzx
mad r2.x, -r2.w, r2.w, l(1.000000)
sqrt r2.x, |r2.x|
add r2.x, -r2.x, l(1.000000)
mul r2.xyw, r2.xxxx, r4.xyxz
mad r0.xyz, r2.xywx, l(0.100000, 0.100000, 0.100000, 0.000000), r0.xyzx
dp3 r2.x, r0.xyzx, r0.xyzx
rsq r2.x, r2.x
mul r0.xyz, r0.xyzx, r2.xxxx
dp3 r2.x, r3.xyzx, r0.xyzx
add r2.x, r2.x, r2.x
mad r0.xyz, r0.xyzx, -r2.xxxx, r3.xyzx
dp3 r2.x, r0.xyzx, r0.xyzx
rsq r2.x, r2.x
mul r0.xyz, r0.xyzx, r2.xxxx
mad r2.xyw, r0.xyxz, cb0[15].wwww, r1.xyxw
dp2 r3.x, cb0[23].xyxx, r2.xwxx
lt r3.x, l(0.000000), r3.x
if_nz r3.x
  dp2 r3.y, cb0[23].xyxx, r1.xwxx
  dp2 r3.w, cb0[23].xyxx, r0.xzxx
  div r3.y, -r3.y, r3.w
  mov r3.w, l(-1)
endif
if_z r3.x
  mov r3.w, l(0)
endif
if_nz r3.w
  mad r2.xyw, r0.xyxz, r3.yyyy, r1.xyxw
else
  dp2 r3.x, cb0[23].zwzz, r2.xwxx
  lt r3.x, l(0.000000), r3.x
  if_nz r3.x
    dp2 r3.w, cb0[23].zwzz, r1.xwxx
    dp2 r4.x, cb0[23].zwzz, r0.xzxx
    div r3.y, -r3.w, r4.x
    mov r3.w, l(-1)
  endif
  if_z r3.x
    mov r3.w, l(0)
  endif
  if_nz r3.w
    mad r2.xyw, r0.xyxz, r3.yyyy, r1.xyxw
  else
    mov r3.y, cb0[15].w
  endif
endif
dp2 r3.x, cb0[24].yxyy, r2.ywyy
lt r3.x, l(0.000000), r3.x
if_nz r3.x
  dp2 r3.w, cb0[24].yxyy, r1.ywyy
  dp2 r4.x, cb0[24].yxyy, r0.yzyy
  div r3.w, -r3.w, r4.x
  mov r4.x, l(-1)
endif
if_z r3.x
  mov r4.x, l(0)
endif
if_nz r4.x
  mad r2.xyw, r0.xyxz, r3.wwww, r1.xyxw
  mov r3.y, r3.w
else
  dp2 r3.x, cb0[24].wzww, r2.ywyy
  lt r3.x, l(0.000000), r3.x
  if_nz r3.x
    dp2 r3.w, cb0[24].wzww, r1.ywyy
    dp2 r4.x, cb0[24].wzww, r0.yzyy
    div r3.w, -r3.w, r4.x
    mov r4.x, l(-1)
  endif
  if_z r3.x
    mov r4.x, l(0)
  endif
  if_nz r4.x
    mad r2.xyw, r0.xyxz, r3.wwww, r1.xyxw
    mov r3.y, r3.w
  endif
endif
lt r3.x, r2.w, l(0.200000)
if_nz r3.x
  add r3.x, r1.w, l(-0.200000)
  div r3.y, r3.x, -r0.z
  mad r2.xyw, r0.xyxz, r3.yyyy, r1.xyxw
endif
div r1.x, r3.z, r2.w
mul r1.xy, r1.xxxx, r2.xyxx
mad r2.x, r0.w, cb0[22].x, r1.x
mad r2.y, -r1.y, cb0[15].x, r2.z
add r1.xy, r2.xyxx, -v1.xyxx
dp2 r0.w, r1.xyxx, r1.xyxx
sqrt r0.w, r0.w
mad r0.w, r0.w, cb0[17].z, l(0.500000)
ftoi r0.w, r0.w
ftoi r2.x, cb0[17].x
imin r0.w, r0.w, r2.x
ilt r2.x, l(0), r0.w
if_nz r2.x
  itof r2.x, r0.w
  div r2.x, l(1.000000, 1.000000, 1.000000, 1.000000), r2.x
  mul r2.yz, r1.xxyx, r2.xxxx
  div r3.x, l(1.000000, 1.000000, 1.000000, 1.000000), r1.w
  div r3.w, l(1.000000, 1.000000, 1.000000, 1.000000), r2.w
  add r3.w, -r3.x, r3.w
  mov r4.xyzw, v1.xyxy
  mov r5.y, l(0)
  mov r5.xz, r1.zzzz
  mov r5.w, l(1.000000)
  mov r6.xy, r1.zzzz
  mov r6.z, r3.x
  loop
    ilt r6.w, r5.y, r0.w
    lt r7.x, l(0.000000), r5.w
    and r6.w, r6.w, r7.x
    breakc_z r6.w
    mad r7.xy, r1.xyxx, r2.xxxx, r4.xyxx
    mad r6.z, r3.w, r2.x, r6.z
    div r6.w, l(1.000000, 1.000000, 1.000000, 1.000000), r6.z
    sample_l r8.xyzw, r7.xyxx, t0.xyzw, s0, l(0.000000)
    mul r7.z, r8.x, l(4.000000)
    mad r5.w, r8.x, l(4.000000), -r6.w
    iadd r5.y, r5.y, l(1)
    mov r4.zw, r4.xxxy
    mov r5.z, r5.x
    mov r6.x, r6.y
    mov r6.y, r7.z
    mov r4.xy, r7.xyxx
    mov r5.x, r6.w
  endloop
  lt r1.x, r5.w, l(0.000000)
  lt r1.y, -r3.y, r5.w
  and r1.x, r1.y, r1.x
  if_nz r1.x
    sample_l r7.xyzw, r4.xyxx, t1.xyzw, s1, l(0.000000)
    mad r1.xyz, r7.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
    dp3 r0.x, r1.xyzx, r0.xyzx
    lt r0.x, r0.x, l(-0.100000)
    if_nz r0.x
      dp2 r0.x, r2.yzyy, r2.yzyy
      sqrt r0.x, r0.x
      mov r0.yz, r4.xxyx
      mov r1.xy, r4.zwzz
      mov r2.xy, r4.xyxx
      mov r1.z, r5.x
      mov r2.z, l(0)
      mov r3.x, r5.z
      mov r3.yw, r6.xxxy
      mov r5.y, r5.x
      mov r5.w, r0.x
      loop
        ilt r6.z, r2.z, r0.w
        lt r6.w, cb0[15].z, r5.w
        and r6.z, r6.w, r6.z
        breakc_z r6.z
        add r6.z, r1.z, r3.x
        mul r5.y, r6.z, l(0.500000)
        add r6.zw, r0.yyyz, r1.xxxy
        mul r2.xy, r6.zwzz, l(0.500000, 0.500000, 0.000000, 0.000000)
        sample_l r7.xyzw, r2.xyxx, t0.xyzw, s0, l(0.000000)
        mul r6.z, r7.x, l(4.000000)
        lt r6.w, r5.y, r6.z
        if_nz r6.w
          mov r1.xy, r2.xyxx
          mov r3.x, r5.y
          mov r3.y, r6.z
        else
          mov r0.yz, r2.xxyx
          mov r1.z, r5.y
          mov r3.w, r6.z
        endif
        add r6.zw, r0.yyyz, -r1.xxxy
        dp2 r6.z, r6.zwzz, r6.zwzz
        sqrt r5.w, r6.z
        iadd r2.z, r2.z, l(1)
      endloop
      add r0.x, -r3.y, r3.w
      mul r0.x, r3.z, |r0.x|
      add r0.y, r3.w, r3.y
      mul r0.y, r0.y, l(0.500000)
      div r0.x, r0.x, r0.y
      div r0.x, r0.x, r5.w
      lt r0.x, r0.x, cb0[17].y
      if_nz r0.x
        add r0.xy, r2.xyxx, -cb0[19].xyxx
        div r0.xy, r0.xyxx, cb0[19].zwzz
        mad r0.xy, r0.xyxx, cb0[16].zwzz, cb0[16].xyxx
        sample_l r0.xyzw, r0.xyxx, t2.xyzw, s3, l(0.000000)
        add r0.w, -r1.w, r5.y
        add r1.x, -r1.w, r2.w
        div r0.w, r0.w, r1.x
        add r1.x, r1.w, l(-35.000000)
        mul_sat r1.x, r1.x, l(0.0666666701)
        add r1.y, -r0.w, l(1.000000)
        mad r0.w, r1.x, r1.y, r0.w
        mad r0.w, -r0.w, r0.w, l(1.000000)
        mul o0.xyz, r0.wwww, r0.xyzx
        mov o0.w, r0.w
      else
        mov o0.xyzw, l(0,0,0,0)
      endif
    else
      mov o0.xyzw, l(0,0,0,0)
    endif
  else
    mov o0.xyzw, l(0,0,0,0)
  endif
else
  mov o0.xyzw, l(0,0,0,0)
endif
ret
// Approximately 256 instruction slots used

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
